/*
 * CKeyboardBindKontrol.h
 *
 *  Created on: 06.10.2012
 *      Author: caffeine
 */

#ifndef CKEYBOARDBINDKONTROL_H_
#define CKEYBOARDBINDKONTROL_H_

#include "IKeyEvent.h"
#include <Keycodes.h>
#include <IReferenceCounted.h>

namespace irr {
namespace control {

/***
 * @class CKeyboardBindKontrol
 * Реализует простое управление клавиатурой. Позволяет биндить клавиши,
 * и посылать события. При желании можно напложить экземпляров. Типа,
 * контролер клавиатуры для меню, другой контролер для самой игры и т.д.
 */
class CKeyboardBindKontrol:public virtual irr::IReferenceCounted {
private:
	struct key_status{
		IKeyEvent*event;
		bool down;
		key_status(){
			down=false;
			event=0;
		}
		~key_status(){if (event) event->drop();}
	};
	key_status keymap[1024];
public:
	CKeyboardBindKontrol();
	virtual ~CKeyboardBindKontrol();
	void setBind(EKEY_CODE key,IKeyEvent*event);
	void giveBind(EKEY_CODE key,IKeyEvent*event);
	bool removeBind(EKEY_CODE key);
	bool onKeyDown(EKEY_CODE key);
	bool onKeyUp(EKEY_CODE key);
};

} /* namespace control */
} /* namespace irr */
#endif /* CKEYBOARDBINDKONTROL_H_ */
